package tedu.api.reflect;

import java.io.File;
import java.net.URISyntaxException;
/**
 * 实例化与当前类Test2在同一个包中的所有类
 * 用无参构造器实例化
 */
public class Test2 {
    public static void main(String[] args) throws Exception {

        //获取包名
        String packName = Test2.class.getPackage().getName();
        //获取类所在的文件夹
        /*
            固定写法,使用哪个类就是定位该类的字节码文件所在的目录
            思路:
            因为java中文件名(不含后缀的部分)与其中的类名一致.
            因此我们遍历目录中所有的文件就可以通过文件名得知每个类的名字
            然后利用Class加载类对象从而实例化
         */
        File dir = new File(
          Test2.class.getResource(".").toURI()
        );
        //拿到文件夹下所有的class类型的文件
        //通过Test2.class所在的目录获取其中所有子项
        File[] files = dir.listFiles(f->f.getName().endsWith(".class"));
        //遍历所有文件
        for(File f : files){
            //获取文件名并拆分，即获取类名
            String className = f.getName().substring(0,f.getName().indexOf("."));
            //通过包名+.+类名的方式，获取类对象
            Class cls = Class.forName(packName+"."+className);
            Object obj = cls.newInstance();//实例化
            System.out.println(obj);
        }
    }
}
